#ifndef INIT_BINARIA_CU
#define INIT_BINARIA_CU

#include "../fitness/fitnessBinaria.cu"

__global__ void inicializarPoblacionBinariaManual (bool* poblacion, float* fitnessActualDevice, struct Random randomGPU, int cantCromosomasPoblacion, float* fitnessOrdenadoDevice, unsigned long* numerosAleatoriosInicializacion){
	//Obtengo posicion a escribir.
	int posicionCromosoma = threadIdx.y * cantGenesEnCromosomaDevice * 2 + blockIdx.y * totalGenesEnPoblacionDevice;
	int posicionFitness = threadIdx.y * 2 + blockIdx.y * cantCromosomasPoblacionDevice;
	for(int i = 0; i<cantGenesEnCromosomaDevice * 2; i++){
		//Obtengo valor aleatorio.
		unsigned int r = (numerosAleatoriosInicializacion[posicionCromosoma+i] % 2);
		bool valor = (r == 1);
		poblacion[posicionCromosoma+i] = valor;
	}
	fitnessActualDevice[posicionFitness] = calcularFitnessBinariaGPU(poblacion, posicionCromosoma);
	fitnessActualDevice[posicionFitness + 1] = calcularFitnessBinariaGPU(poblacion, posicionCromosoma + cantGenesEnCromosomaDevice);

	fitnessOrdenadoDevice[posicionFitness] = fitnessActualDevice[posicionFitness];
	fitnessOrdenadoDevice[posicionFitness + 1] = fitnessActualDevice[posicionFitness + 1];
}

#endif
